package src.string;

/**
 * @author FengBaiyu
 */
public class Lc_StringConvert
{
    /**
     * 将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行 Z 字形排列。
     *
     * 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时，排列如下：
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/zigzag-conversion
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     */

    public String convert(String s, int numRows) {
        char[] chars = s.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();

        int cross = Math.max(0,numRows-2);
        int step = numRows+cross;

        for (int i =0;i<numRows;i++){

            if(i==0||i==numRows-1){
                for (int j =i; j<s.length();j+=step){
                    stringBuilder.append(chars[j]);
                }

            }else{
                for (int j =i; j<s.length();j+=step){
                    stringBuilder.append(chars[j]);
                    if ((numRows-1-i)*2+j<s.length()){
                        stringBuilder.append(chars[(numRows-1-i)*2+j]);
                    }
                }
            }

        }
        return stringBuilder.toString();

    }
}
